package com.humbleyuan.blogfront.controller;

import com.alibaba.fastjson.JSONObject;
import com.humbleyuan.blogfront.entity.comment.CommentMain;
import com.humbleyuan.blogfront.service.CommentService;
import com.humbleyuan.blogfront.service.VisitUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author: HumbleYuan
 * @description: 评论模块控制层
 * @Date: 2019/8/10
 * @Time: 9:37
 * @Version: 1.0
 */
@RequestMapping("/api/comment")
@Controller
public class CommentController {

    @Autowired
    CommentService commentService;

    @Autowired
    VisitUserService visitUserService;

    /**
     * 获取所有评论
     *
     * @return Map<String, Object>
     */
    @GetMapping("/allComments")
    @ResponseBody
    public Map<String, Object> getRootCommentListsWithAllReplays() {

        /**
         * 还是返回Map:
         * 1.List<CommentMain>
         * 2.commentNum:主评论数
         * 3.personNum：评论人总数(带上回复)
         */
        Map<String, Object> commentInfo = new HashMap<>();
        List<CommentMain> commentMainList =
                commentService.getRootCommentListsWithAllReplays();

        commentInfo.put("personNum", commentService.getDifCommentUserNum());
        commentInfo.put("commentNum", commentMainList.size() +
                commentService.getReplayCommentNum());
        commentInfo.put("commentList", commentMainList);

        return commentInfo;
    }

    /**
     * 提交主评论
     *
     * @return String(提交执行结果)
     */
    @PostMapping("/commitMainComment")
    @ResponseBody
    public String commitMainComment(@RequestBody JSONObject jsonObject) {

        //将数据传到Service进行处理,先获取到需要的JSONObject:comment
        JSONObject mainComment = jsonObject.getJSONObject("comment");

        /**
         * 先进行用户验证处理
         * 若账号不符合规范，直接返回结果
         */
        String res = verifyVisitUser(mainComment);

        if (res != null)
            return res;

        String commitResInfo;

        //再选择是否进行评论提交操作
        if (commentService.commitMainComment(mainComment) == 1)
            commitResInfo = "提交成功";
        else
            commitResInfo = "提交失败";

        return commitResInfo;
    }


    /**
     * 提交回复评论
     *
     * @return String(提交执行结果)
     */
    @PostMapping("/commitRepalyComment")
    @ResponseBody
    public String commitReplayComment(@RequestBody JSONObject jsonObject) {

        JSONObject replyComment = jsonObject.getJSONObject("comment");

        /**
         * 先进行用户验证处理
         * 若账号不符合规范，直接返回结果
         */
        String res = verifyVisitUser(replyComment);
        if (res != null)
            return res;

        commentService.commitReplyComment(replyComment);

        System.out.println(jsonObject.toString());
        return "success";
    }


    /**
     * 用户验证
     */
    public String verifyVisitUser(JSONObject comment) {

        /**
         * verifyRes会出现的结果：
         * 1.若用户名为空，则判定为游客，返回"游客"
         * 2.若用户名不为空，密码为空(此处设定新用户不输入密码，前台提示)，
         *  默认其为新用户，验证用户名是否存在
         *    2.1若不存在，返回"新用户"；
         *    2.2若存在，返回“用户名已存在,请修改用户名”；
         * 3.若用户名不为空，密码不为空(判定其为已有用户，前台提示)
         *  默认其为老用户，先验证用户名
         *    3.1若不存在，返回前台“用户名不正确/新用户请勿输入密码”
         *    3.2若存在，验证密码是否对应
         *         3.2.1若对应，返回"用户名密码正确"；
         *         3.2.2若不对应，返回前台“密码不正确，是否使用新用户名进行评论”
         */
        /**
         * 用户类型验证在前端完成：
         * 1.若userType='visitor',则是游客，直接提交，v_user_id = null;
         * 2.若userType='newUser',则是新用户，需要添加新用户，再提交，v_user_id = 新增用户id
         * 3.若userType='regularUser',则是老用户，先进行用户验证，再提交或直接返回错误信息
         */

        //先进行用户验证处理
        String verifyRes = visitUserService.verifyUser(
                comment.getString("mUsername"),
                comment.getString("mPwd"));

        if (verifyRes.contains("已存在") || verifyRes.contains("不正确")) {

            //若账号不符合规范，直接返回结果
            return verifyRes;

        } else if (verifyRes.contains("游客")) {

            //直接提交，用户id为空
            comment.put("type", "visitor");

        } else if (verifyRes.contains("新用户")) {

            //先进行新用户新增操作
            comment.put("type", "new");

        } else if (verifyRes.contains("密码正确")) {

            //用户验证正确
            comment.put("type", "old");

        }
        return null;
    }


}
